package cn.lcsjsxy.yxc.objectoriented.www;
    /*this的作用和其词义很接近
     * 》他在方法内部使用，即这个方法所属对象的引用；
     * 》他在构造器内部使用，表示该构造器正在初始化的对象
     *
     * this表示当前对象，可以调用类的属性、方法和构造器
     *
     * 什么时候使用this关键字：
     * 具体的：我们可以使用this来区分局部变量和属性。
     * 比如：this.name=name;
     *
     * this关键字的使用：
     * 1.this可以用来修饰、调用：属性、方法、构造器
     *
     * 2.this修饰属性和方法：
     *   this理解为：当前对象 或 当前正在创建的对象
     *
     * 2.1在类的方法当中，我们可以使用”this.属性“或”this.方法“的方式，调用当前对象属性或方法。但是，通常情况下，我们都选择省略”“this.”
     * 特殊情况下，如果方法的形参和类的属性同名，我们必须显示的使用“this.变量”的形式，表明此变量是属性，而非形参
     * 2.2在类的构造器当中，我们可以使用”this.属性“或”this.方法“的方式，调用当前正在创建的对象属性或方法。但是，通常情况下，我们都选择省略”“this.”
     * 特殊情况下，如果构造器的形参和类的属性同名，我们必须显示的使用“this.变量”的形式，表明此变量是属性，而非形参
     * 3.this调用构造器
     * 1.我们在类的构造器中，可以显示的使用"this（形参列表）”的方式，调用本类中指定的其他构造器
     * 2.构造器中不能通过"this（形参列表）”的方式调用自己
     * 3.如果一个类中有n个构造器，则最多有n-1个构造器中使用了"this（形参列表）”
     * 4.规定："this（形参列表）”必须声明在当前构造器的首行
     * 5.构造器内部，最多只能声明一个"this（形参列表）”，用来调用其他的构造器*/
    public class ThisTest {
        public static void main(String[] args) {
            Person1 P1=new Person1();
            P1.setAge(5);
            P1.setName("wa");
            System.out.println(P1.getAge()+P1.getName());

            ThisTest T1=new ThisTest(18,"马牛逼");
        }
        int 年龄;
        String 姓名;
        public ThisTest(){}
        public ThisTest(int 年龄){
            this.年龄=年龄;
        }
        public ThisTest(String 姓名){
            this.姓名=姓名;
        }
        public ThisTest(int 年龄,String 姓名){
            this(年龄);
            this.姓名=姓名;
            System.out.println(姓名+"\t"+年龄);
        }
    }

    class Person1{
        private String name;
        private int age;

        public void setName(String name){
            this.name=name;
        }
        public String getName(){
            return name;
        }
        public void setAge(int age){
            this.age=age;  //此处this就相当当前的对象，P1调的时候时P1，P2调的时候时P2
        }
        public int getAge(){
            return this.age;
        }

        public void eat(){
            System.out.println("吃饭");
            this.run();  //按照以往所学这里是run（）;实际上这里省略了this，其意思是哪个对象调用了eat（）我就调用那个对象所对应的run
        }
    public void run(){
        System.out.println("跑步");
    }
}
